// 通用API客户端工具函数
import type { EventHandlerRequest, H3Event } from 'h3';
// API基础配置
const API_BASE_URL = 'https://api2.zzrbnews.com/testapi/?pwd=zxcmtest';
// const API_KEY = 'blinglee';
/*
a. 在接口文档上请求时：地址中包含 testapi 需要地址中增加参数 pwd=zxcmtest：
    https://testapi.zhengguannews.cn/testapi/?pwd=zxcmtest
b. 在正式的请求中是不包含testapi 的: 
    https://testapi.zhengguannews.cn/
    但是参数需要进行加密处理
*/
  
// 通用的API请求函数
export async function apiRequest<T = any>(
  method: string,
  params?: Record<string, any>,
  methodType: string = 'get',
  withAuth: boolean = true,
  baseUrl: string = API_BASE_URL
): Promise<T> {
  // 构建URL
  let url = `${baseUrl}` + "&Method=" + method;
  // console.log('-------------------：\r\n\r\n', params);
  // console.log('0000000000000000：\r\n', params);
  // 构建请求选项
  const options: RequestInit = {
    headers: {}
  };

  // 添加认证头
  if (withAuth) {
    options.headers = {
      ...options.headers,
      // 'access-key': API_KEY
    };
  }
  // 发送请求
  let queryString
  if (params && Object.keys(params).length > 0) {
    queryString = Object.entries(params)
      .filter(([_, value]) => value !== undefined && value !== null && value !== '')
      .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
      .join('&');
  }

  // 区分 get 还是 post 请求
  if (methodType.toLowerCase() === 'post') {
    options.method = 'POST';
    options.body = JSON.stringify(params);
  }
  else {
    // 默认 get 请求
    options.method = 'POST';
    // 添加查询参数 
  }
  if (queryString) {
    url += `&${queryString}`;
  }
  console.log('----------', url, options);
  const response = await fetch(url, options);
  // 检查响应状态
  if (!response.ok) {
    throw new Error(`API请求失败: ${response.status} ${response.statusText}`);
  } else {
    console.log('API请求成功:', response.status, response.statusText);
  }
  
  let res = await response.json()
  return res;
}

// 处理API错误的通用函数
export function handleApiError(error: any, defaultData: any) {
  console.error('API请求错误:', error);
  return {
    success: false,
    message: error.message || '请求失败',
    data: defaultData
  };
}

// 从H3事件中获取查询参数并转换为正确类型
export function getTypedQuery(event: H3Event<EventHandlerRequest>) {
  const query = getQuery(event);
  return {
    ...query,
    // 转换常见的数字类型参数
    page: query.page ? Number(query.page) : 1,
    num: query.num ? Number(query.num) : 8
  };
}